/*
* 枚举搜索在每个状态下的操作（下一步）
* 优化：从前后两个方向同时搜索，减少空间和时间开销
*/
#include <iostream>
#include <string>
#include <queue>
#include <unordered_map>
#define N 11
using namespace std;
// #define ONLINE_GUDGE

string A,B; // 初始字符串 目标字符串 A-(op)->B
string a[N];
string b[N];

int n, ans;

int trans(queue<string>& q, unordered_map<string,int>& da, unordered_map<string, int>& db,
        string a[], string b[]){

	int d = da[q.front()];
    while (q.size() && da[q.front()] == d)
    {
        auto t = q.front(); // 取出队头元素
        q.pop();

        for (int i = 0; i < n; i ++ ) // t从哪里开始扩展
            for (int j = 0; j < t.size(); j ++ ) // 枚举规则
                if (t.substr(j, a[i].size()) == a[i]) // 符合第j条规则
                {
                	// 变换之后的结果state:前面不变的部分+ 变化的部分 + 后面不变的部分
                    string state = t.substr(0, j) + b[i] + t.substr(j + a[i].size());

					// printf("op:%d %s->%s\n", j, t.c_str(), state.c_str());

                	// state状态是否落到b里面去，两个方向会师，返回最小步数
                    if (db.count(state)) return da[t] + db[state] + 1;

                	// 如果该状态之前已扩展过，
                    if (da.count(state)) continue;
                    da[state] = da[t] + 1;
                    q.push(state);
                }
    }

    return 11;

}

int bfs()
{
	if (A == B) return 0;

	unordered_map<string, int> mpa, mpb; 
	// mpa[str] == step : 从初始状态到str需要step步
	// mpb[str] == step : 从str状态到终点需要step步

	queue<string> qa, qb; // 两个方向的队列

	qa.push(A), mpa[A] = 0; // 起点A到起点的距离为0
    qb.push(B), mpb[B] = 0; // 终点B到终点B的距离为0

	int step = 0;
	while (qa.size() && qb.size())
	{

		int t; // 记录最小步数
        // 哪个方向的队列的长度更小一些，空间更小一些，从该方向开始扩展，
        // 时间复杂度比较平滑,否则有1个点会超时
        if(qa.size() <= qb.size()) 
            t = trans(qa, mpa, mpb, a, b);
        else t = trans(qb,mpb, mpa, b, a);
        // 如果最小步数在10步以内

        if (t <= 10) return t;
        if ( ++ step == 10) return -1;

	}
    
	return -1; 
}

int main()
{
    #ifdef ONLINE_JUDGE

    #else
    freopen("./in.txt","r",stdin);
    #endif
    ios::sync_with_stdio(false);   
	cin.tie(0);

	cin >> A >> B;

	while( cin >> a[n] >> b[n]) n ++;

	int t = bfs();
    if (t == -1) puts("NO ANSWER!");
    else cout << t << endl;

	return 0;
}